home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / comm / ambos / BBSInterface.lha / BBS.mod < prev    next >
Text File  |  1995-04-11  |  22KB  |  392 lines

  1. (******************************************************************************)
  2. (* Modulname  : BBS                                                           *)
  3. (* Version    : v1.100 (beta)                                                 *)
  4. (* Datum      : 23.03.1995                                                    *)
  5. (* Autor      : Andreas Leicht                                                *)
  6. (* Adresse    : Seefahrerstr. 5                                               *)
  7. (*            : 27721 Ritterhude                                              *)
  8. (* Telefon    : 0421 / 63 79 76                                               *)
  9. (* EMail      : Andi@doom.gun.de                                              *)
  10. (* Copyright  : Andreas Leicht © 05.11.1994                                   *)
  11. (* Sprache    : Oberon 2                                                      *)
  12. (* Compiler   : Amiga Oberon v3.20d                                           *)
  13. (******************************************************************************)
  14.  
  15. (******************************************************************************)
  16. (* Geschichte : v1.000 (beta) - 05.11.1994 - AO v3.20d                        *)
  17. (*            : Erste Umsetzung                                               *)
  18. (* Geschichte : v1.100 (beta) - 23.03.1995 - AO v3.20d                        *)
  19. (*            : Hatte gegen einige kleine Standarts verstoßen - Sorry         *)
  20. (*            : - Modulnamen von `AmbosLibOberon` nach `BBS` geändert         *)
  21. (*            :   Jetzt heißt das Modul auch wie die Library                  *)
  22. (*            : - Strukturnamen beginnen jetzt mit einem Großbuchstaben       *)
  23. (*            : - Konstanten beginnen jetzt mit einem Kleinbuchstaben         *)
  24. (*            : - Alle als privat deklarierte Funktionen rausgeschmissen      *)
  25. (*            : Ne Menge dummer Fehler verbessert (Scheiß `C`) ;-)            *)
  26. (*            : Den Eintrag `language` in der ExternInfo-Struktur vergessen   *)
  27. (*            : Weitere Fehler beseitigt                                      *)
  28. (******************************************************************************)
  29.  
  30. MODULE BBS;
  31.  
  32. IMPORT  exe * :=  Exec,
  33.         dos * :=  Dos,
  34.         sys * :=  SYSTEM;
  35.  
  36. TYPE
  37.   ExternInfoPtr       * = UNTRACED POINTER TO ExternInfo;
  38.   TransferNodePtr     * = UNTRACED POINTER TO TransferNode;
  39.   UserDatenExternPtr  * = UNTRACED POINTER TO UserDatenExtern;
  40.   FileExternPtr       * = UNTRACED POINTER TO FileExtern;
  41.   BrettDatenExternPtr * = UNTRACED POINTER TO BrettDatenExtern;
  42.   BBSMenuPtr          * = UNTRACED POINTER TO BBSMenu;
  43.  
  44. CONST
  45.   bbsName       * = "BBS.library";
  46.   bbsVersion    * = 1;
  47.  
  48. (******************************************************************************)
  49. (*                                                                            *)
  50. (******************************************************************************)
  51. CONST
  52.   up            * = 6;
  53.   down          * = 3;
  54.   left          * = 4;
  55.   right         * = 5;
  56.   delete        * = 7;
  57.   backspace     * = 8;
  58.   return        * = 13;
  59.  
  60. (******************************************************************************)
  61. (* Werte für StartetFrom in der ExternInfo Struktur                           *)
  62. (******************************************************************************)
  63. CONST
  64.   fromAMenu           * = 0;            (* Programm wurd von der GeoNeto- oder        *)
  65.                                         (* AmBoS-Menu-Oberfläche gestartet            *)
  66.   fromNachLogin       * = 1;            (* Batchdatei                                 *)
  67.   fromGastLogin       * = 2;            (* Batchdatei                                 *)
  68.   fromVorAntrag       * = 3;            (* Batchdatei                                 *)
  69.   fromNachAntrag      * = 4;            (* Batchdatei                                 *)
  70.   fromVorDownLoad     * = 5;            (* Batchdatei                                 *)
  71.   fromNachDownLoad    * = 6;            (* Batchdatei                                 *)
  72.   fromVorUpLoad       * = 7;            (* Batchdatei                                 *)
  73.   fromNachUpLoad      * = 8;            (* Batchdatei                                 *)
  74.   fromLogoff          * = 9;            (* Batchdatei                                 *)
  75.   fromRelogin         * = 10;           (* Batchdatei                                 *)
  76.   fromSetup           * = 11;           (* Dieser Modus ist noch nicht implementiert, *)
  77.                                         (* er soll dazu verwendet werden, konfor-     *)
  78.                                         (* tables Setup für Externe dem Sysop zur     *)
  79.                                         (* Verfügunug stellen                         *)
  80.                                         (* Sollte dieser Modus auftauchen das         *)
  81.                                         (* Programm am besten sofort beenden          *)
  82.  
  83. (******************************************************************************)
  84. (* Werte für Language in der ExternInfo-Struktur                              *)
  85. (******************************************************************************)
  86. CONST
  87.   languageDeutsch     * = 0;
  88.   languageEnglish     * = 1;
  89.  
  90. (******************************************************************************)
  91. (* Werte für DateFormat in der ExternInfo-Struktur                            *)
  92. (******************************************************************************)
  93. CONST
  94.   dateFormatCDN       * = 0; (* Tag-Monat-Jahr *)
  95.   dateFormatUSA       * = 1; (* Monat-Tag-Jahr *)
  96.  
  97. (******************************************************************************)
  98. (* Werte für tr_Type in der TransferNode-Struktur                             *)
  99. (******************************************************************************)
  100. CONST
  101.   transferUpLoad      * = 1;
  102.   transferDownLoad    * = 2;
  103.  
  104. (******************************************************************************)
  105. (* Filetyen                                                                   *)
  106. (******************************************************************************)
  107. CONST
  108.   fileTypeMessage     * = 1;
  109.   fileTypeBin         * = 2;
  110.  
  111. (******************************************************************************)
  112. (* Bretttypen                                                                 *)
  113. (******************************************************************************)
  114. CONST
  115.   brettTypeNoBrett    * = 0;
  116.   brettTypeAsc        * = 1;
  117.   brettTypeBin        * = 2;
  118.   brettTypeAscBin     * = 3;
  119.   brettTypeHead       * = 4;
  120.   brettTypeExtern     * = 5;
  121.   brettTypePm         * = 6;
  122.  
  123. (******************************************************************************)
  124. (* Eine ExternInfo-Struktur. Wird von der Funktion bbs_Open() zurückgegeben   *)
  125. (******************************************************************************)
  126. TYPE
  127.   ExternInfo * = STRUCT
  128.     conOnly           * : BOOLEAN;      (* Wenn ConLogin ungleich 0               *)
  129.     startedFrom       * : LONGINT;      (* Hier kann man entnehmen, von wo das    *)
  130.                                         (* Programm gestartet wurde               *)
  131.     userName          * : exe.STRPTR;   (* Name des Users                         *)
  132.     city              * : exe.STRPTR;   (* Wohnort des Users                      *)
  133.     loginTime         * : dos.Date;     (* Zeitpunkt des Logins                   *)
  134.  
  135.     totalDownLoads    * : LONGINT;      (* Download Bytes des Users               *)
  136.     totalUpLoads      * : LONGINT;      (* Upload Bytes des Users                 *)
  137.     baudRate          * : LONGINT;      (* BaudRate des Connects                  *)
  138.     lines             * : LONGINT;      (* Anzahl der Zeilen des Users            *)
  139.  
  140.     callsToday        * : LONGINT;      (* Anzahl der Anrufe heute in der Box     *)
  141.     callsTotal        * : LONGINT;      (* Anzahl der gesammten Anrufe in der Box *)
  142.     lastCallNr        * : LONGINT;      (* Nummer des letzten Anrufes vom User    *)
  143.                                         (* in der Box                             *)
  144.     callNr            * : LONGINT;      (* Aktuelle Anrufnummer                   *)
  145.  
  146.     transferListe     * : exe.ListPtr;  (* Liste der Up- bzw. Downgelodeten       *)
  147.                                         (* Files wenn das Programm aus der        *)
  148.                                         (* Nachupload- oder Nachdownload-Batch    *)
  149.                                         (* gestartet wurde                        *)
  150.     autoLogOff        * : LONGINT;      (* Ist dieser Wert ungleich NULL befinde  *)
  151.                                         (* sich der User in einer Autologoff-     *)
  152.                                         (* Sequenze, d.h. Eingabeaufforderungen   *)
  153.                                         (* sind tunlichst zu unterlassen... ;-)   *)
  154.     language          * : INTEGER;      (* Die Sprache, die der User eingestellt  *)
  155.                                         (* hat                                    *)
  156.     dateFormat        * : INTEGER;      (* Das bevorzugte Datumsformat des Users  *)
  157.     coSysop           * : INTEGER;      (* Wenn ungleich NULL ist der User Sysop  *)
  158.                                         (* oder CoSysop                           *)
  159.     ambosVersion      * : INTEGER;      (* AmBoS Version                          *)
  160.     ambosRevision     * : INTEGER;      (* AmBoS Revision                         *)
  161.     ambosSerialNumber * : LONGINT;      (* Seriennummer oder 0 für DEMO-Version   *)
  162.   END;
  163.  
  164. (******************************************************************************)
  165. (* Nodes in der ExternInfo-Struktur->TransferListe                            *)
  166. (******************************************************************************)
  167. TYPE
  168.   TransferNode * = STRUCT
  169.     trSucc            * : TransferNodePtr;
  170.     trPrev            * : TransferNodePtr;
  171.     trType            * : sys.BYTE;       (* Art der Übertragung Up oder Download     *)
  172.     trPri             * : sys.BYTE;
  173.     trName            * : exe.STRPTR;     (* Names des Files                          *)
  174.     trRealName        * : exe.STRPTR;     (* Name unter dem das File auf dem          *)
  175.                                           (* Datenträger zu finden ist                *)
  176.     trBoxPath         * : exe.STRPTR;     (* Kompletter Brettpfad                     *)
  177.     trDosPath         * : exe.STRPTR;     (* Pfad unter dem das File auf dem          *)
  178.                                           (* Datenträger zu finden ist                *)
  179.     trUpLoader        * : exe.STRPTR;     (* Der Uploader des Files                   *)
  180.     trSize            * : LONGINT;        (* Länge des Files in Bytes                 *)
  181.     trCps             * : LONGINT;        (* CPS_Rate bei der Übertragung             *)
  182.     trAnzDownLoads    * : LONGINT;        (* Wie oft das File schon downgeloadet wurde*)
  183.     trProtectedBoard  * : LONGINT;        (* File liegt in einem durch Zugangsgruppe  *)
  184.                                           (* geschützten Pfad                         *)
  185. END;
  186.  
  187. (******************************************************************************)
  188. (* Eine UserDatenExtern-Struktur. Wird von bbs_LoadUserData() zurückgegeben   *)
  189. (******************************************************************************)
  190. TYPE
  191.   UserDatenExtern * = STRUCT
  192.     ambosPrivat * : exe.APTR;
  193.     userName    * : ARRAY 30 OF CHAR;
  194.     firstName   * : ARRAY 50 OF CHAR;
  195.     name        * : ARRAY 50 OF CHAR;
  196.     city        * : ARRAY 100 OF CHAR;
  197.     street      * : ARRAY 60 OF CHAR;
  198.     phoneNr     * : ARRAY 30 OF CHAR;
  199.     fax         * : ARRAY 30 OF CHAR;
  200.     modem       * : ARRAY 30 OF CHAR;
  201.     computer    * : ARRAY 30 OF CHAR;
  202.     substitute  * : ARRAY 30 OF CHAR; (* Vertreter *)
  203.     dlProtocol  * : ARRAY 30 OF CHAR;
  204.     packer      * : ARRAY 30 OF CHAR;
  205.  
  206.     birthYear   * : INTEGER;
  207.     birthMonth  * : INTEGER;
  208.     birthDay    * : INTEGER;
  209.     lastLogin   * : LONGINT; (* In Minuten seid dem 01.01.1978 *)
  210.     newsDate    * : LONGINT; (* In Minuten seid dem 01.01.1978 *)
  211.     firstLogin  * : LONGINT; (* In Minuten seid dem 01.01.1978 *)
  212.  
  213.     dlFreeSpace * : LONGINT;
  214.     upLoads     * : LONGINT;
  215.     downLoads   * : LONGINT;
  216.  
  217.     lastCall    * : LONGINT;
  218.  
  219.     onlineTime  * : INTEGER;
  220.     onlineToday * : INTEGER;
  221.     lines       * : INTEGER;
  222.     zone        * : INTEGER;
  223.     upDownRatio * : INTEGER;
  224.     maxPmMails  * : INTEGER;
  225.  
  226.     numCrashes  * : INTEGER;
  227.     numLogins   * : INTEGER;
  228. END;
  229.  
  230. (******************************************************************************)
  231. (* Eine FileExtern-Struktur                                                   *)
  232. (******************************************************************************)
  233. TYPE
  234.   FileExtern * = STRUCT
  235.     ambosPrivat   * : exe.APTR;
  236.  
  237.     number        * : LONGINT;    (* Nummer des Files im Brett            *)
  238.     delete        * : INTEGER;    (* kann gesetzt werden                  *)
  239.     markiert      * : INTEGER;    (* Eintrag ist markiert                 *)
  240.  
  241.     fileType      * : INTEGER;    (* File oder Mail                       *)
  242.     brettType     * : INTEGER;    (* Art des aktuellen Brettes            *)
  243.     downLoads     * : INTEGER;    (* Anzahl der Zugriffe auf den Eintrag  *)
  244.     upLoadDate    * : LONGINT;    (* in Minuten seit dem 01.01.1978       *)
  245.     createDate    * : LONGINT;    (* in Minuten seit dem 01.01.1978       *)
  246.     size          * : LONGINT;    (* Länge von Binärfiles                 *)
  247.     lines         * : LONGINT;    (* Anzahl der Zeilen bei Mails          *)
  248.  
  249.     upLoader      * : exe.STRING; (* Name des Uploaders                   *)
  250.     realName      * : exe.STRING; (* Name unter dem das File auf der      *)
  251.                                   (* Platte zu finden ist                 *)
  252.     boxPath       * : exe.STRING; (* Brettpfad                            *)
  253.     dosPath       * : exe.STRING; (* Dospfad des aktuellen Brettes        *)
  254.  
  255.     readMeFile    * : ARRAY 42 OF CHAR;
  256.     boxName       * : ARRAY 42 OF CHAR;
  257.     comment       * : ARRAY 50 OF CHAR;
  258. END;
  259.  
  260. (******************************************************************************)
  261. (* Eine BrettDatenExtern-Struktur                                             *)
  262. (******************************************************************************)
  263. TYPE
  264.   BrettDatenExtern * = STRUCT
  265.     ambosPrivat     * : exe.APTR;
  266.  
  267.     brettName       * : ARRAY 40 OF CHAR;
  268.     brettPfad       * : ARRAY 256 OF CHAR;
  269.  
  270.     schreibGruppe   * : ARRAY 40 OF CHAR;
  271.     zugangsGruppe   * : ARRAY 40 OF CHAR;
  272.     leseGruppe      * : ARRAY 40 OF CHAR;
  273.     verwalter       * : ARRAY 40 OF CHAR;
  274.     brettPasswort   * : ARRAY 40 OF CHAR;
  275.  
  276.     letzterEintrag  * : LONGINT;
  277.     brettFlags      * : LONGINT;
  278.     brettTyp        * : exe.BYTE;
  279.     locked          * : exe.BYTE;
  280.     area            * : exe.BYTE;
  281.     noRatio         * : exe.BYTE;
  282. END;
  283.  
  284. (******************************************************************************)
  285. (* Datenstruktur für bbs_menu()                                               *)
  286. (******************************************************************************)
  287. TYPE
  288.   BBSMenu * = STRUCT
  289.     next      * : exe.APTR;
  290.     name      * : exe.APTR;
  291.     menuID    * : LONGINT;    (* Niemals auf 0 setzen !       *)
  292.     private1  * : LONGINT;    (* Immer mit 0 initialisieren ! *)
  293.     private2  * : SHORTINT;   (* Immer mit 0 initialisieren ! *)
  294.   END;
  295.  
  296. (******************************************************************************)
  297. (*                                                                            *)
  298. (******************************************************************************)
  299. VAR
  300.  bbs                      * : exe.LibraryPtr;
  301.  base                     * : exe.LibraryPtr;
  302.  
  303. (******************************************************************************)
  304. (* bbs_Open                - Anmelden des externen Programmes am Port         *)
  305. (* bbs_Close               - Abmelden des externen Programmes bei Port        *)
  306. (* bbs_PutS                - einen String ausgeben                            *)
  307. (* bbs_GetS                - einen String einlesen                            *)
  308. (* bbs_SGetS               - liest einen nicht sichtbaren String ein          *)
  309. (* bbs_GetC                - liest ein Zeichen ein                            *)
  310. (* bbs_FGetC               - liest ein gefiltertes Zeichen ein                *)
  311. (* bbs_Menu                - baut ein horizontales Cursor-Shortcut-Menü auf   *)
  312. (* bbs_Graphic             - zeigt eine ANSI-Datei an                         *)
  313. (* bbs_Text                - zeigt eine Text-Datei an                         *)
  314. (* bbs_RPutS               -                                                  *)
  315. (* bbs_WGetC               - liest ein Zeichen ein                            *)
  316. (* bbs_WFGetC              - liest ein gefiltertes Zeichen ein                *)
  317. (* bbs_PrintF              - formatierte Ausgabe (wie dos.PrintF)             *)
  318. (* bbs_WGetS               -                                                  *)
  319. (* bbs_LookC               - lesen eines Zeichen (asynchron)                  *)
  320. (* bbs_FirstUser           - Userdaten des ersten Users auslesen              *)
  321. (* bbs_NextUser            - weitere Userdaten lesen                          *)
  322. (* bbs_ObtainName          - belegen eines Names                              *)
  323. (* bbs_ReleaseName         - freigeben eines Names                            *)
  324. (* bbs_LoadUserData        - auslesen von Userdaten                           *)
  325. (* bbs_SaveUserData        - speichern von Userdaten                          *)
  326. (* bbs_FreeUserData        - Userdaten freigeben                              *)
  327. (* bbs_MailToUser          - Nachricht an einen User schreiben                *)
  328. (* bbs_MailToBrett         - Nachricht in ein Brett schreiben                 *)
  329. (* bbs_GetBrettType        - Bretttyp feststellen                             *)
  330. (* bbs_FirstBrettInhalt    - Brettdaten auslesen                              *)
  331. (* bbs_NextBrettInhalt     - Brettinhalt weiterlesen                          *)
  332. (* bbs_BrettInhaltByNumber - bestimmten Brettinhalt lesen                     *)
  333. (* bbs_FreeBrettInhalt     - Brettinhalt freigeben                            *)
  334. (* bbs_SaveBrettInhalt     - Brettinhalt speichern                            *)
  335. (******************************************************************************)
  336.  
  337. PROCEDURE Open            *{bbs,- 42}(port{9}          : ARRAY OF CHAR): ExternInfoPtr;
  338. PROCEDURE Close           *{bbs,- 48};
  339. PROCEDURE PutS            *{bbs,- 54}(string{9}        : ARRAY OF CHAR);
  340. PROCEDURE GetS            *{bbs,- 60}(deposid{9}       : ARRAY OF CHAR;
  341.                                       maxChars{1}      : LONGINT;
  342.                                       mode{2}          : LONGINT): INTEGER;
  343.  
  344. PROCEDURE SGetS           *{bbs,- 66}(deposid{9}       : ARRAY OF CHAR;
  345.                                       maxChars{10}     : LONGINT;
  346.                                       mode{11}         : LONGINT): INTEGER;
  347. PROCEDURE GetC            *{bbs,- 78}(): CHAR;
  348. PROCEDURE FGetC           *{bbs,- 84}(): CHAR;
  349. PROCEDURE Menu            *{bbs,- 90}(menuDaten{9}     : BBSMenuPtr): LONGINT;
  350. PROCEDURE Graphic         *{bbs,- 96}(fileName{9}      : ARRAY OF CHAR);
  351. PROCEDURE Text            *{bbs,-102}(fileName{9}      : ARRAY OF CHAR);
  352. PROCEDURE RPutS           *{bbs,-114}(string{9}        : ARRAY OF CHAR);
  353. PROCEDURE WGetC           *{bbs,-138}(waitBits{1}      : LONGINT): CHAR;
  354. PROCEDURE WFGetC          *{bbs,-144}(waitBits{1}      : LONGINT): CHAR;
  355. PROCEDURE PrintF          *{bbs,-168}(string{9}        : ARRAY OF CHAR;
  356.                                       arg1{10}..       : exe.APTR);
  357. PROCEDURE WGetS           *{bbs,-174};
  358. PROCEDURE LookC           *{bbs,-186}(): SHORTINT;
  359. PROCEDURE FirstUser       *{bbs,-192}(): UserDatenExternPtr;
  360. PROCEDURE NextUser        *{bbs,-198}(userDaten{9}     : UserDatenExternPtr): UserDatenExternPtr;
  361. PROCEDURE ObtainName      *{bbs,-204}(string{9}        : ARRAY OF CHAR);
  362. PROCEDURE ReleaseName     *{bbs,-210}(string{9}        : ARRAY OF CHAR);
  363. PROCEDURE LoadUserData    *{bbs,-216}(name{9}          : ARRAY OF CHAR): UserDatenExternPtr;
  364. PROCEDURE SaveUserData    *{bbs,-222}(userDaten{9}     : UserDatenExternPtr);
  365. PROCEDURE FreeUserData    *{bbs,-228}(userDaten{9}     : UserDatenExternPtr);
  366. PROCEDURE MailToUser      *{bbs,-234}(userName{9}      : ARRAY OF CHAR;
  367.                                       absender{1}      : ARRAY OF CHAR;
  368.                                       betreff{2}       : ARRAY OF CHAR;
  369.                                       textFile{10}     : ARRAY OF CHAR);
  370. PROCEDURE MailToBrett     *{bbs,-240}(userName{9}      : ARRAY OF CHAR;
  371.                                       absender{1}      : ARRAY OF CHAR;
  372.                                       betreff{2}       : ARRAY OF CHAR;
  373.                                       textFile{10}     : ARRAY OF CHAR);
  374. PROCEDURE GetBrettType     *{bbs,-246}(): LONGINT;
  375. PROCEDURE FirstBrettInhalt *{bbs,-252}(): FileExternPtr;
  376. PROCEDURE NextBrettInhalt  *{bbs,-258}(fileExtern{9}   : FileExternPtr);
  377. PROCEDURE BrettInhaltByNumber *{bbs,-264}(number{1}    : LONGINT): FileExternPtr;
  378. PROCEDURE FreeBrettInhalt     *{bbs,-270}(fileExtern{9} : FileExternPtr);
  379. PROCEDURE SaveBrettInhalt     *{bbs,-276}(fileExtern{9} : FileExternPtr);
  380.  
  381. (* $OvflChk- $RangeChk- $StackChk- $NilChk- $ReturnChk- $CaseChk- *)
  382.  
  383. BEGIN
  384.   bbs :=   exe.OpenLibrary(bbsName,bbsVersion);
  385.   base := bbs;
  386.  
  387. CLOSE
  388.   IF bbs#NIL THEN exe.CloseLibrary(bbs) END;
  389.  
  390. END BBS.
  391.  
  392.